package com.gmadmin.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gmadmin.entity.SysUser;
import com.gmadmin.payload.UserQueryCriteria;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Optional;


/**
 * @author zhangliang
 * @version 1.0
 * @date 2021/2/2 15:57
 */
@Mapper
public interface SysUserMapper extends BaseMapper<SysUser> {

    /**
     * 通过用户名查询用户
     * @param usernameOrEmailOrPhone
     * @return
     */
    Optional<SysUser> findByUsernameOrEmailOrPhone(@Param("usernameOrEmailOrPhone") String usernameOrEmailOrPhone);

    /**
     * 导出
     * @param ids 用户id
     * @return
     */
    List<SysUser> findAll(List<Long> ids);

    /**
     * 分页查询
     * @param queryCriteria 查询参数
     * @param page 分页条件
     * @return
     */
    IPage<SysUser> findListByPage(@Param("query") UserQueryCriteria queryCriteria,Page<SysUser> page);




    /**
     * 插入用户何角色关联表
     * @param userId  用户id
     * @param roleIds  角色ids
     */
    void insertUserAndRoles(@Param("userId") Long userId, @Param("roleIds") List<Long> roleIds);


    /**
     * 删除用户角色关联表
     * @param userIds
     */
    boolean deleteUsersAndRoles(@Param("userIds") List<Long> userIds);

    /**
     * 删除用户岗位关联表
     * @param userIds
     */
    void deleteUsersAndPositions(@Param("userIds") List<Long> userIds);
    /**
     * 新增用户岗位关系表
     * @param userId
     * @param positionIds
     */
    void insertUserAndPositions(@Param("userId") Long userId, @Param("positionIds") List<Long> positionIds);


    /**
     * 删除用户与组织关联
     * @param userIds
     */
    void deleteUsersAndOrganizations(@Param("userIds") List<Long> userIds);

    /**
     * 新增用户与组织关联
     * @param userId
     * @param organizationIds
     */
    void insertUserAndOrganizations(@Param("userId") Long userId, @Param("organizationIds") List<Long> organizationIds);
}
